package com.ai.agent.rag;

import org.springframework.ai.document.Document;
import org.springframework.ai.transformer.splitter.TokenTextSplitter;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 自定义基于 Token 的切词器
 */
@Component
class MyTokenTextSplitter {
    public List<Document> splitDocuments(List<Document> documents) {
        // 创建默认配置的Token分词器（使用默认参数）
        TokenTextSplitter splitter = new TokenTextSplitter();
        // 执行文档分割并返回结果
        return splitter.apply(documents);
    }

    /**
     * 使用自定义参数分割文档列表
     *
     * @param documents 待分割的文档列表
     * @return 分割后的文档列表
     */
    public List<Document> splitCustomized(List<Document> documents) {
        // 创建自定义配置的Token分词器，参数说明：
        // - 200: 每个分割块的目标token数量（理想大小）
        // - 100: 每个分割块的最小token数量（低于此值会合并）
        // - 10: 相邻分割块之间的重叠token数量（提高上下文连贯性）
        // - 5000: 单个文档允许的最大token数量（超过会被丢弃或截断）
        // - true: 是否启用智能分割模式（根据语义边界分割）
        TokenTextSplitter splitter = new TokenTextSplitter(200, 100, 10, 5000, true);
        return splitter.apply(documents);
    }
}
